<?php
/**
 * 환경 설정 파일
 *
 *
 *
 */

// ====================================================================================
// 환경 함수
// ====================================================================================
require_once("inc.default.func.php");

// ====================================================================================
// 세션데이터 초기화
// ====================================================================================
$_SESSION = array();

// ====================================================================================
// 예외처리 관리
// ====================================================================================
$_EXCEPTION = null;

// ====================================================================================
// 어드민 접속인지 확인
// $IS_DEVELOPER boolean <true | false>
// ====================================================================================
$IS_DEVELOPER = _isDeveloper();

// ====================================================================================
// 디버그 사용 여부
// ====================================================================================
$IS_DEBUG = 0;

// ====================================================================================
// 디버그 정보
// ====================================================================================
$DEBUG_INFO = ($IS_DEVELOPER) ? _getDebug() : null;

// ====================================================================================
// 디버그 사용 여부 확인
// ====================================================================================
if (empty($DEBUG_INFO['type'])) {
    $DEBUG_INFO['type'] = null;
}
$IS_DEBUG = (is_array($DEBUG_INFO) && $DEBUG_INFO['type'] != 0) ? 1 : 0;

// ====================================================================================
// 에러 출력 옵션
// ====================================================================================
$IS_ON_OFF = (empty($DEBUG_INFO['display_error']) === true) ? false : true;

// ====================================================================================
// php.ini 에러 메세지 출력 옵션
// ====================================================================================
//error_reporting(E_ALL ^ E_NOTICE);
error_reporting(E_ALL);
ini_set('display_errors', $IS_ON_OFF);
ini_set('log_errors', $IS_ON_OFF);

define('DEBUG', $IS_DEBUG);

// ====================================================================================
// document_root 설정
// ====================================================================================
$DOCUMENT_ROOT = (empty($DOCUMENT_ROOT) === false) ? $DOCUMENT_ROOT : $_SERVER['DOCUMENT_ROOT'];

// win
if (substr(PHP_OS, 0, 3) == 'WIN') {
    $_DOCUMENT_ROOT = implode('/', array_slice(explode('\\', $DOCUMENT_ROOT), 0, -1));
} else {
    $_DOCUMENT_ROOT = implode('/', array_slice(explode('/', $DOCUMENT_ROOT), 0, -1));
}

// ====================================================================================
// define 설정 - 디렉토리
// ====================================================================================
define('SC_DIR_HTML', $_DOCUMENT_ROOT.'/html');
define('SC_DIR_LIB', $_DOCUMENT_ROOT.'/lib');
define('SC_DIR_RESOURCE', $_DOCUMENT_ROOT.'/resource');
define('SC_DIR_VIEW', $_DOCUMENT_ROOT.'/view');

// ====================================================================================
// 서비스 구분 : 기본 설정
// ====================================================================================
$serviceConfigFile = SC_DIR_LIB.'/service/inc/service.inc.default.php';
if(file_exists($serviceConfigFile)) {
    require_once($serviceConfigFile);
}

// ====================================================================================
// 데이터베이스 인스턴스 관리
// ====================================================================================
$DATABASE_INSTANCE = array();

// ====================================================================================
// class autoload
//
// DOCUMENT_ROOT/../lib 경로로부터의 Class라이브러리를 호출
// pear 와 중첩되지 않음.
//
// 예) 디렉토리
//
// - 최초 디렉토리는 소문자로 시작
// /lib/util
//
// - 서브 디렉토리는 대문자로 시작
// /lib/util/String
//
// - 클래스명 : 디렉토리명 + 파일명으로 선언
// /lib/util/utilString.php
// /lib/util/String/utilStringCut.php
// ====================================================================================
if (!function_exists('__autoload')) {
    function __autoload($className)
    {
        if (class_exists($className, false)) return false;

        $sFullClassPath = classPath($className);

        if (is_file($sFullClassPath)) {
            require_once($sFullClassPath);

            return class_exists($className, false);
        }
        return false;
    }
}

function classPath($className)
{
    preg_match_all('/([^A-Z]|[^a-z0-9])([a-z0-9]+)/', $className, $aClassName);

    // model 은 depth 3단계 까지만 디렉토리(대문자)로 구분한다.
    // model->Cont->첫번째 테이블 구분자
    if ($aClassName[0][0] == 'model' && count($aClassName[0]) > 3) {
        $sPath = implode('/', array_slice($aClassName[0], 0, 3));

    } else {
        $sPath = implode('/', array_slice($aClassName[0], 0, -1));
    }

    return SC_DIR_LIB.'/class/'.$sPath.'/'.$className.'.php';
}

// ====================================================================================
// php 에러 핸들러
// 개발자일 경우만 적용
// ====================================================================================
if ($IS_DEVELOPER && $DEBUG_INFO['display_error']) {
    set_error_handler('commError::errorHandler');
}

// ====================================================================================
// 예외처리 핸들러
// ====================================================================================
set_exception_handler('exceptionHandler');

// ====================================================================================
// 페이지 소멸 시 호출
// ====================================================================================
register_shutdown_function('_ShutDown');